function ajax(option) {  //创建一个ajax的方法，传入的形参是options对象
    return new Promise(resolve => {         //返还值是一个promise对象
        let o2s = obj => Object.keys(obj).map(key => key + "=" + obj[key]).join("&");   //创建一个名为o2s的方法，用来将对象拼接成键值对
        let xhr;                            //创建一个xhr
        if (window.XMLHttpRequest) {    //兼容性处理   如果在window上有XMLHttpRequest方法  
            xhr = new XMLHttpRequest();         //那么就创建一个XMLHttpRequest对象并赋值给xhr
        }
        else {
            xhr = new ActiveXObject();          //否则创建一个ActiveXObject对象
        }

        let { url = "", method = "get", async = true, data = {}, contentType = true, success = function () { }, dataType = "text" } = option;
        // 解构options  
        // method默认值是get,如果有传过来就是传过来的method值
        // async默认true异步传输   ,   false为同步传输
        // data默认值为空
        // contentType默认值为true非文件传输,如果需要传文件,contentType要为false
        // dataType传回去的数据类型,text传回去的为普通字符串,json传回去的为json解析过得对象或者对象数组.默认为text
        // success回调函数

        if (method.toLowerCase() == "get") {        //忽略大小写情况下，传过来的method为get时
            url = url + "?" + o2s(data);            //url就需要拼接search值     o  2  s   （object to search）  
        }
        xhr.open(method, url, async);               //打开ajax


        if (method.toLowerCase() == "post") {       //忽略大小写情况下，method的传过来的为post
            if (contentType) {                      //并且不是文件传输时
                                                    //需要设置请求头      
                xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded")
            }
        }

        if (method.toLowerCase() == "post") {       //忽略大小写情况下，传过来的method值为post时
            if (contentType) {                      //且是非文件传输
                let sendData = o2s(data);           //现将data数据组装成键值对的形式
                xhr.send(sendData);                 //然后将组装的键值发送出去
            } else {                                //文件传输的情况下
                xhr.send(data);                     //data值是formdata对象，即不需要设置请求头，formdata对象是组装好的，直接发送即可
            }
        }
        else {                                      //不是post传输
            xhr.send();                                //直接发送
        }   

        xhr.onload = function () {                  //一切加载完毕时
            if (dataType.toLowerCase() == "text") {         //如果需要传字符串回去
                success(xhr.responseText);      //用回调函数success将数据直接传递出去
                resolve(xhr.responseText);      //promise的resolve方法将数据直接传递出去
            }
            else if (dataType.toLowerCase() == "json") {
                success(JSON.parse(xhr.responseText));//用回调函数success将数据通过json.parse解析成对象或者对象数组传递出去
                resolve(JSON.parse(xhr.responseText));//promise的resolve方法将数据通过json.parse解析成对象或者对象数组传递出去
            }
        }
        
    });
}

